<?php

/**
 * Actualiza campos en la tabla PokerTorneos:
 * pozoAcumulado, total_puntos, inscripciones_normales, 
 * inscripciones_combos, total_inscriptos, total_compitiendo, 
 */
function refreshTorneoData($torneoId) {
    $query = queryPozoAcumulado($torneoId);
    $query.= queryPayOuts($torneoId);
    $query.= queryPuntos($torneoId);
    $query.= queryComisionCasa($torneoId);
    $query.= queryBounty($torneoId);
    $query.= "UPDATE poker_torneos SET 
                pozo_acumulado = @pozo,                 
                total_puntos = @puntos, 
                total_bounty = @bounty, 
                total_comision = @comision, 
                inscripciones_normales = ( 
                        SELECT COUNT(m.id) 
                        FROM poker_movimientos AS m, poker_asignaciones AS a 
                        WHERE m.poker_torneo_id = $torneoId 
                        AND m.poker_asignacion_id = a.id 
                        AND a.tipo = 'INSCRIPCION' 
                        AND a.promo = 'NORMAL' 
                ), 
                inscripciones_combos = ( 
                        SELECT COUNT(m.id) 
                        FROM poker_movimientos AS m, poker_asignaciones AS a 
                        WHERE m.poker_torneo_id = $torneoId 
                        AND m.poker_asignacion_id = a.id 
                        AND a.tipo = 'INSCRIPCION' 
                        AND a.promo != 'NORMAL' 
                ), 
                total_inscriptos = ( 
                        SELECT COUNT(id) FROM poker_specifics 
                        WHERE poker_torneo_id = $torneoId 
                        AND estado != 'PRE INSCRIPTO' 
                ), 
                total_compitiendo = ( 
                        SELECT COUNT(id) FROM poker_specifics 
                        WHERE poker_torneo_id = $torneoId 
                        AND estado != 'ELIMINADO' 
                        AND estado != 'DESCALIFICADO' 
                        AND estado != 'GANADOR' 
                ) 
                WHERE id = $torneoId LIMIT 1;";

    multiQuery($query);
}

/**
 * Actualiza campos en la tabla PokerTorneos:
 * pozoAcumulado, total_puntos, total_recompras, total_addons
 */
function refreshComprasRealizadas($torneoId) {
    $query = queryPozoAcumulado($torneoId);
    $query.= queryPayOuts($torneoId);
    $query.= queryPuntos($torneoId);
    $query.= queryComisionCasa($torneoId);
    $query.= queryBounty($torneoId);
    $query.= queryCompras($torneoId, "rebuys");
    $query.= queryCompras($torneoId, "addons");
    $query.= "UPDATE poker_torneos SET 
                pozo_acumulado = @pozo, 
                total_puntos = @puntos, 
                total_bounty = @bounty, 
                total_comision = @comision, 
                total_recompras = @rebuys, 
                total_addons = @addons 
                WHERE id = $torneoId LIMIT 1;";

    multiQuery($query);
}

/*
 * ***********************************************************
 *          FRAGMENTOS DE CONSULTAS UTILIZADAS
 * ***********************************************************
 * 
 */

/**
 * Retorna el fragmento de consulta correspondiente al calculo de pozo acumulado
 * se deberá utilizar en un multiQuery ya que devuelve el resultado en una
 * variable MySql: @pozo
 */
function queryPozoAcumulado($torneoId) {
    $query = "SELECT @pozo:= SUM( 
				ROUND(m.ingreso - (m.ingreso*a.comision_porcentual/100) - a.comision_fija) - 
				(IF(t.bounty>0, IF(a.tipo='INSCRIPCION', t.bounty, 0), 0))
			) AS pozo 
                FROM poker_movimientos AS m, poker_asignaciones AS a, poker_torneos AS t 
                WHERE m.poker_torneo_id = $torneoId 
                AND m.poker_asignacion_id = a.id 
                AND m.poker_torneo_id = t.id;";

    return $query;
}

/**
 * Retorna el Fragmento de consulta correspondiente a la sumatoria de puntos actuales en el torneo
 * esta consulta se deberá ejecutar en un multiQuery ya que se almacena en una variable @puntos
 */
function queryPuntos($torneoId) {
    $query = "SELECT @puntos:= SUM(puntos) AS puntos FROM poker_specifics WHERE poker_torneo_id = $torneoId; ";
    return $query;
}

/**
 * Retorna el fragmento de consulta correspondiente a la cantidad de Recompras o
 * AddOn's efectuados, dependiendo del parametro $var devuelve la variable MySQL
 */
function queryCompras($torneoId, $var) {
    $tipo = 'REBUY';
    if ($var === "addons") {
        $tipo = 'ADD ON';
    }

    $query = "SELECT @$var:= COUNT(m.id) 
                FROM poker_movimientos AS m, poker_asignaciones AS a 
                WHERE m.poker_torneo_id = $torneoId 
                AND m.poker_asignacion_id = a.id 
                AND a.tipo = '$tipo' 
                AND a.id NOT IN ( 
                        SELECT app.poker_asignacion_id 
                        FROM poker_asignaciones_por_persona AS app 
                        WHERE app.persona_id = m.persona_id 
                        AND app.poker_asignacion_id = m.poker_asignacion_id 
                        AND app.estado != 'UTILIZADO'
                ); ";
    return $query;
}

/**
 * Retorna el fragmento de consulta correspondiente al calculo de la comision
 * para la casa, acumulando solo los porcentajes de cada asigancion.
 * Se deberá utilizar en un multiQuery ya que devuelve el resultado en una
 * variable MySql: @comision
 */
function queryComisionCasa($torneoId) {
    $query = "SELECT @comision:= SUM(ROUND((m.ingreso*a.comision_porcentual/100) + a.comision_fija)) AS comision 
            FROM poker_movimientos AS m, poker_asignaciones AS a, poker_torneos AS t 
            WHERE m.poker_torneo_id = $torneoId 
            AND m.poker_asignacion_id = a.id 
            AND m.poker_torneo_id = t.id;";

    return $query;
}

/**
 * Retorna el fragmento de consulta correspondiente al calculo del bounty acumulado.
 * Se deberá utilizar en un multiQuery ya que devuelve el resultado en una
 * variable MySql: @bounty
 */
function queryBounty($torneoId) {
    $query = "SELECT @bounty:= IFNULL(SUM(IF(t.bounty>0, IF(a.tipo='INSCRIPCION', t.bounty, 0), 0)),0) AS bounty 
            FROM poker_movimientos AS m, poker_asignaciones AS a, poker_torneos AS t 
            WHERE m.poker_torneo_id = $torneoId 
            AND m.poker_asignacion_id = a.id 
            AND m.poker_torneo_id = t.id;";

    return $query;
}


/**
 * Retorna el fragmento de consulta correspondiente al calculo de los premios del torneo
 * Se deberá utilizar en un multiQuery ya que devuelve el resultado en un string que
 * contiene la consulta, se debe realizar primero el calculo del pozo
 */
function queryPayOuts($torneoId) {
    $query = "UPDATE poker_pay_out 
              SET monto = IF(porcentaje>0, FLOOR(@pozo*porcentaje/100), monto_fijo) 
              WHERE poker_torneo_id = $torneoId; ";
    return $query;
}
